home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
007
/
pars.arc
/
PARS.C
< prev
next >
Wrap
C/C++ Source or Header
|
1987-12-03
|
3KB
|
96 lines
#include <stdio.h>
#include <fcntl.h>
#include <ctype.h>
#include <stdlib.h>
extern char *uargv[20]; /* max number of arguments */
extern int uargc;
char bstring[160], line[80]; /* a single arg wouldn't exceed 80, would it? */
int i, j, w;
pars(xargc,xargv)
int xargc;
char *xargv[];
{
strcpy(bstring,xargv[0]); /* calling program name */
for (i = 1; i < xargc; i++)
{ if (i < xargc)
strcat(bstring," ");
if (strchr(xargv[i],' ')) /* if contains space, a quoted string */
{ strcat(bstring,"\"");
strcat(bstring,xargv[i]);
strcat(bstring,"\"");
}
else
strcat(bstring,xargv[i]);
}
j = w = 0;
for (i = 0; i <= strlen(bstring); i++)
switch (tolower(bstring[i]))
{
case ' ': /* space, comma, semicolon */
case ',':
case ';':
movarg();
if (bstring[i+1] == ' ') /* , or ; followed by space */
i++;
break;
case '\"': /* quoted string */
i++;
while (bstring[i] != '\"')
line[w++] = bstring[i++];
movarg();
if (bstring[i+1] == ' ')
i++; /* move past trailing space */
break;
case '\'': /* quoted string */
i++;
while (bstring[i] != '\'')
line[w++] = bstring[i++];
movarg();
if (bstring[i+1] == ' ')
i++; /* move past trailing space */
break;
case '/': /* slash option */
if (w > 0)
movarg();
line[w++] = '/'; /* all trailing chrs included */
break;
case '-': /* hyphen option */
if (w == 0)
line[w++] = '/';
else
line[w++] = '-'; /* within arg - pass through */
break;
case '\0': /* end of string */
if (w > 0)
movarg();
break;
default: /* nothing in particular */
line[w++] = tolower(bstring[i]);
}
uargc = j;
/* This block is included in "demo.exe":
printf("bstring= (%s)\n",bstring);
printf("uargc= %d\n",uargc);
for (i = 0; i < uargc; i++)
printf("uargv[%d]= (%s)\n",i,uargv[i]);
*/
}
movarg()
{ line[w] = '\0';
uargv[j] = malloc(strlen(line)+1);
strcpy(uargv[j++],line);
w = 0;
}